/**
 * 通过对象获取路由的 name
 * @param {Object} router 包含name、fullPath属性的对象
 * @returns {String}
 */
export const getNameByRouter = (router) => {
  return router.name || router.fullPath.split('/').filter(item => item).map(item => `${item[0].toUpperCase()}${item.slice(1)}`).join('')
}

/**
 * 获取浏览器名称
 * @param {String} userAgent    
 * @returns 
 */
export const getBrowserName = (userAgent = navigator.userAgent) => {
  // 此处顺序很重要，并且对于未列出的浏览器，这可能会报错。

  if (userAgent.includes("Firefox")) {
    // "Mozilla/5.0 (X11; Linux i686; rv:104.0) Gecko/20100101 Firefox/104.0"
    return "Mozilla Firefox";
  } else if (userAgent.includes("SamsungBrowser")) {
    // "Mozilla/5.0 (Linux; Android 9; SAMSUNG SM-G955F Build/PPR1.180610.011) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/9.4 Chrome/67.0.3396.87 Mobile Safari/537.36"
    return "Samsung Internet";
  } else if (userAgent.includes("Opera") || userAgent.includes("OPR")) {
    // "Mozilla/5.0 (Macintosh; Intel Mac OS X 12_5_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36 OPR/90.0.4480.54"
    return "Opera";
  } else if (userAgent.includes("Edge")) {
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299"
    return "Microsoft Edge (Legacy)";
  } else if (userAgent.includes("Edg")) {
    // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36 Edg/104.0.1293.70"
    return "Microsoft Edge (Chromium)";
  } else if (userAgent.includes("Chrome")) {
    // "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"
    return "Google Chrome 或 Chromium";
  } else if (userAgent.includes("Safari")) {
    // "Mozilla/5.0 (iPhone; CPU iPhone OS 15_6_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.6 Mobile/15E148 Safari/604.1"
    return "Apple Safari";
  } else {
    return "未知";
  }
}
export const merge = (target, ...sources) => {
  if (!sources.length) return target;
  const source = sources.shift();

  if (typeof target !== 'object' || target === null || typeof source !== 'object' || source === null) {
    return source;
  }

  for (const key in source) {
    if (Object.prototype.hasOwnProperty.call(source, key)) {
      if (typeof source[key] === 'object' && source[key] !== null) {
        if (typeof target[key] === 'object' && target[key] !== null) {
          merge(target[key], source[key]);
        } else {
          target[key] = merge(target[key], source[key]);
        }
      } else {
        target[key] = source[key];
      }
    }
  }

  return merge(target, ...sources);
}